1 module hip.hipaudio.backend.webaudio.source; 2 3 version(WebAssembly): 4 5 extern(C) size_t WebAudioSourceCreate(); 6 extern(C) void WebAudioSourceStop(size_t src); 7 extern(C) void WebAudioSourceSetData(size_t src, size_t buffer); 8 extern(C) void WebAudioSourceSetPlaying(size_t src, bool playing); 9 extern(C) void WebAudioSourceSetLooping(size_t src, bool shouldLoop); 10 extern(C) void WebAudioSourceSetPitch(size_t src, float pitch); 11 extern(C) void WebAudioSourceSetVolume(size_t src, float volume); 12 extern(C) void WebAudioSourceSetPlaybackRate(size_t src, float rate); 13 14 import hip.hipaudio.backend.webaudio.player; 15 import hip.hipaudio.backend.webaudio.clip; 16 import hip.hipaudio.audiosource; 17 import hip.hipaudio.backend.audioclipbase; 18 import hip.error.handler; 19 20 21 class HipWebAudioSource : HipAudioSource 22 { 23 protected bool isClipDirty = true; 24 protected size_t webSrc = 0; 25 26 this(HipWebAudioPlayer player){webSrc = WebAudioSourceCreate();} 27 alias clip = HipAudioSource.clip; 28 29 30 override IHipAudioClip clip(IHipAudioClip newClip) 31 { 32 if(newClip != clip) 33 isClipDirty = true; 34 35 WebAudioSourceSetData(webSrc, getBufferFromAPI(newClip).webaudio); 36 super.clip(newClip); 37 return newClip; 38 } 39 40 alias loop = HipAudioSource.loop; 41 override bool loop(bool value) 42 { 43 bool ret = super.loop(value); 44 WebAudioSourceSetLooping(webSrc, value); 45 return ret; 46 } 47 48 49 override bool play() 50 { 51 WebAudioSourceSetPlaying(webSrc, true); 52 return true; 53 } 54 override bool stop() 55 { 56 WebAudioSourceStop(webSrc); 57 return true; 58 } 59 override bool pause() 60 { 61 WebAudioSourceSetPlaying(webSrc, false); 62 return true; 63 } 64 override bool play_streamed() => false; 65 66 67 ~this(){webSrc = 0;} 68 }